package com.apigen.platform.service;

import com.apigen.platform.dto.CodeGenerationRequest;
import com.apigen.platform.entity.GenTable;
import com.apigen.platform.entity.GenTableField;

import java.util.List;
import java.util.Map;

/**
 * 模板渲染服务接口
 *
 * @author API Generator Platform
 * @since 2025-10-03
 */
public interface TemplateRenderService {

    /**
     * 渲染模板
     *
     * @param templateContent 模板内容
     * @param data 模板数据
     * @return 渲染后的内容
     */
    String renderTemplate(String templateContent, Map<String, Object> data);

    /**
     * 为表生成模板数据
     *
     * @param table 表信息
     * @param fields 字段列表
     * @param config 生成配置
     * @return 模板数据
     */
    Map<String, Object> generateTableData(GenTable table, List<GenTableField> fields, CodeGenerationRequest config);

    /**
     * 生成项目级别的模板数据
     *
     * @param config 生成配置
     * @return 项目模板数据
     */
    Map<String, Object> generateProjectData(CodeGenerationRequest config);

    /**
     * 获取模板文件内容
     *
     * @param frameworkType 框架类型
     * @param templateName 模板名称
     * @return 模板内容
     */
    String getTemplateContent(String frameworkType, String templateName);

    /**
     * 获取框架支持的所有模板
     *
     * @param frameworkType 框架类型
     * @return 模板列表
     */
    List<Map<String, Object>> getFrameworkTemplates(String frameworkType);

    /**
     * 转换为驼峰命名
     *
     * @param str 原字符串
     * @return 驼峰命名字符串
     */
    String toCamelCase(String str);

    /**
     * 转换为帕斯卡命名
     *
     * @param str 原字符串
     * @return 帕斯卡命名字符串
     */
    String toPascalCase(String str);

    /**
     * 转换为下划线命名
     *
     * @param str 原字符串
     * @return 下划线命名字符串
     */
    String toUnderscoreCase(String str);
}
